/*编程实现：
              （1）通过键盘输入数据，在内存新建一个链表
                          STU *creat_list(void);
              （2）查看链表内容
                             void display(STU *head);
              （3）将链表内容保存到数据表中
                            void save(STU *head);
*/

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <dirent.h>

typedef struct student
{
    int code;
    char name[20];
    int age;
    struct student *next;
} STU;

STU *creat_list(void);
void display(STU *head);
void save(STU *head);
void list_freed(STU *head);


int main()
{
  STU *head = creat_list();
  //printf("%d\n",__LINE__);
  save(head);
 
  display(head);
    
  list_freed(head);
    
}

// （1）通过键盘输入数据，在内存新建一个链表
STU *creat_list(void)
{
    STU *head = NULL;
    head = (STU *)malloc(sizeof(STU));
    memset(head, 0, sizeof(STU));
    STU *p = head;
    int ret = 1;
        //printf("please input code %d\n", ret);
        //scanf("%d", &ret);
    while (ret > 0)
    { 
        printf("请选择是否添加数据 输入ret == 0结束添加\n");
        scanf("%d",&ret);
        if (ret == 0){
          break;
        }
        STU *temp = malloc(sizeof(STU));
        memset(temp, 0, sizeof(STU));
        scanf("%d%s%d", &temp->code, temp->name, &temp->age);
        p->next = temp;
        temp->next = NULL;
        p = temp;
    }
      return head;
}


void display(STU *head)
{
  
if(head ==NULL)
{
  return;
}
STU* p=head->next;
printf("编号 姓名 年龄\n");
while(p!=NULL)
{
  printf("%d %s %d\n",p->code,p->name,p->age);
  p=p->next;
}   
}

void list_freed(STU *head)
{
  STU* p = head;
  while(p!=NULL)
  {
    free(p);
    p=p->next;
  }
}

void save(STU *head)
{
MYSQL *res = NULL,*connect = NULL;
int ret = 0;
connect = mysql_init(NULL);
res = mysql_real_connect(connect,"localhost","root","","student",0,NULL,0);
if (res == NULL){
  printf("%s",mysql_error(connect));
}
STU *temp=head->next;
char sql[100]={0};
while(temp!=NULL){ 
sprintf(sql,"insert into student values(%d,'%s',%d)",temp->code,temp->name,temp->age);
printf("%s\n",sql);
  ret = mysql_query(connect,sql);
  if(ret!=0)
    {
    printf("%s\n",mysql_error(connect));
    mysql_close(connect);
    printf("添加数据失败\n");
    exit(-1);
    }else{
    printf("添加数据成功\n");
    }
  temp=temp->next;
}
mysql_close(connect);
}